Iz09PWlzZmF0YWxwbHVnaW49PT0NCiMgLSotIGNvZGluZzogdXRmLTggLSotDQoNCiMgIGZhdGFs
IHBsdWdpbg0KIyAgYWxpYXNfcGx1Z2luLnB5DQoNCiMgIEluaXRpYWwgQ29weXJpZ2h0IKkgMjAw
NyBkaW1pY2h4cCA8ZGltaWNoeHBAZ21haWwuY29tPg0KIyAgTW9kaWZpY2F0aW9ucyBDb3B5cmln
aHQgqSAyMDA3IEFscyA8QWxzQGV4cGxvaXQuaW4+DQojICBNb2RpZmljYXRpb25zIENvcHlyaWdo
dCCpIDIwMDkgd2QvbG90dXNmZWV0IDxkYW8veW9nYT4NCg0KIyAgVGhpcyBwcm9ncmFtIGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiMgIGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5DQojICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4NCg0KIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsDQojICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KIyAgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCg0KZGVmIGhhbmRsZXJfYWxpYXNhZGQodHlw
ZSwgc291cmNlLCBwYXJhbWV0ZXJzKToNCglncm91cGNoYXQgPSBzb3VyY2VbMV0NCgkNCglpZiBu
b3QgR1JPVVBDSEFUUy5oYXNfa2V5KGdyb3VwY2hhdCk6DQoJCXJlcGx5KHR5cGUsIHNvdXJjZSwg
dSdUaGlzIGNvbW1hbmQgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25mZXJlbmNlIScpDQoJCXJldHVy
bg0KDQoJYWNjZXNzID0gMA0KCQ0KCXNwbHRkcCA9IHBhcmFtZXRlcnMuc3BsaXQoJz0nLDEpDQoJ
DQoJaWYgbGVuKHNwbHRkcCkgPT0gMjoNCgkJYWxhYyA9IHNwbHRkcFswXS5zdHJpcCgpDQoJCWFs
Ym8gPSBzcGx0ZHBbMV0uc3RyaXAoKQ0KCQkNCgkJc3BsYWwgPSBhbGFjLnNwbGl0KCc6JywxKQ0K
CQkNCgkJaWYgbGVuKHNwbGFsKSA9PSAyOg0KCQkJYWxpID0gc3BsYWxbMF0uc3RyaXAoKQ0KCQkJ
YWNjID0gc3BsYWxbMV0uc3RyaXAoKQ0KCQkJDQoJCQlpZiBhY2M6DQoJCQkJaWYgYWNjLmlzZGln
aXQoKToNCgkJCQkJYWNjZXNzID0gaW50KGFjYykNCgkJCQkJDQoJCQkJCWlmIGFjY2VzcyA+IDEw
MDoNCgkJCQkJCWFjY2VzcyA9IDEwMA0KCQkJCWVsc2U6DQoJCQkJCWFsaSA9ICclczolcycgJSAo
YWxpLGFjYykNCgkJCQkJDQoJCQlwYXJhbWV0ZXJzID0gJyVzID0gJXMnICUoYWxpLGFsYm8pDQoJ
DQoJcGwgPSBBTElBUy5wYXJzZV9jbWQocGFyYW1ldGVycykNCglpZiAobGVuKHBsKTwyKToNCgkJ
cmVwID0gdSdJbnZhbGlkIHN5bnRheCEnDQoJZWxzZToNCgkJaWYgcGxbMF0gaW4gQ09NTUFORF9I
QU5ETEVSUzoNCgkJCXJlcGx5KHR5cGUsIHNvdXJjZSwgdSdJbnZhbGlkIG5hbWUgb2YgYSBsb2Nh
bCBhbGlhcyEnKQ0KCQkJcmV0dXJuDQoJCQ0KCQlpZiBwbFsxXS5zcGxpdCgpWzBdIGluIENPTU1B
TkRfSEFORExFUlMgb3IgcGxbMV0uc3BsaXQoKVswXSBpbiBBTElBUy5nYWxpYXNsaXN0IG9yIHBs
WzFdLnNwbGl0KClbMF0gaW4gQUxJQVMuYWxpYXNsaXN0W2dyb3VwY2hhdF06DQoJCQljb21tYW5k
PXBsWzFdLnNwbGl0KCcgJywxKQ0KCQkJQUxJQVMuYWRkKHBsWzBdLHBsWzFdLGdyb3VwY2hhdCkN
CgkJCQ0KCQkJaWYgYWNjZXNzOg0KCQkJCUFMSUFTLmdpdmVfYWNjZXNzKHBsWzBdLGFjY2Vzcyxn
cm91cGNoYXQpDQoJCQllbHNlOg0KCQkJCWlmIGNvbW1hbmRbMF0gaW4gQ09NTUFORF9IQU5ETEVS
UzoNCgkJCQkJYWNjZXNzPUNPTU1BTkRTW2NvbW1hbmRbMF1dWydhY2Nlc3MnXQ0KCQkJCQlBTElB
Uy5naXZlX2FjY2VzcyhwbFswXSxhY2Nlc3MsZ3JvdXBjaGF0KQ0KCQkJCWVsaWYgY29tbWFuZFsw
XSBpbiBBTElBUy5nYWNjZXNzbGlzdDoNCgkJCQkJYWNjZXNzPUFMSUFTLmdhY2Nlc3NsaXN0W2Nv
bW1hbmRbMF1dDQoJCQkJCUFMSUFTLmdpdmVfYWNjZXNzKHBsWzBdLGFjY2Vzcyxncm91cGNoYXQp
DQoJCQkJZWxpZiBjb21tYW5kWzBdIGluIEFMSUFTLmFjY2Vzc2xpc3RbZ3JvdXBjaGF0XToNCgkJ
CQkJYWNjZXNzPUFMSUFTLmFjY2Vzc2xpc3RbZ3JvdXBjaGF0XVtjb21tYW5kWzBdXQ0KCQkJCQlB
TElBUy5naXZlX2FjY2VzcyhwbFswXSxhY2Nlc3MsZ3JvdXBjaGF0KQ0KCQ0KCQkJcmVwID0gdSdM
b2NhbCBhbGlhcyBhZGRlZCEnDQoJCWVsc2U6DQoJCQlyZXAgPSB1J1RoZSBib2R5IG9mIGFuIGFs
aWFzIGRvZXMgbm90IGNvbnRhaW4gYSBjb21tYW5kIG9yIGFub3RoZXIgYWxpYXMhJw0KCXJlcGx5
KHR5cGUsIHNvdXJjZSwgcmVwKQ0KCQ0KZGVmIGhhbmRsZXJfZ2FsaWFzYWRkKHR5cGUsIHNvdXJj
ZSwgcGFyYW1ldGVycyk6DQoJZ2FjY2VzcyA9IDANCgkNCglzcGx0ZHAgPSBwYXJhbWV0ZXJzLnNw
bGl0KCc9JywxKQ0KCQ0KCWlmIGxlbihzcGx0ZHApID09IDI6DQoJCWFsYWMgPSBzcGx0ZHBbMF0u
c3RyaXAoKQ0KCQlhbGJvID0gc3BsdGRwWzFdLnN0cmlwKCkNCgkJDQoJCXNwbGFsID0gYWxhYy5z
cGxpdCgnOicsMSkNCgkJDQoJCWlmIGxlbihzcGxhbCkgPT0gMjoNCgkJCWFsaSA9IHNwbGFsWzBd
LnN0cmlwKCkNCgkJCWFjYyA9IHNwbGFsWzFdLnN0cmlwKCkNCgkJCQ0KCQkJaWYgYWNjOg0KCQkJ
CWlmIGFjYy5pc2RpZ2l0KCk6DQoJCQkJCWdhY2Nlc3MgPSBpbnQoYWNjKQ0KCQkJCQkNCgkJCQkJ
aWYgZ2FjY2VzcyA+IDEwMDoNCgkJCQkJCWdhY2Nlc3MgPSAxMDANCgkJCQllbHNlOg0KCQkJCQlh
bGkgPSAnJXM6JXMnICUgKGFsaSxhY2MpDQoJCQkJCQ0KCQkJcGFyYW1ldGVycyA9ICclcyA9ICVz
JyAlKGFsaSxhbGJvKQ0KDQoJcGwgPSBBTElBUy5wYXJzZV9jbWQocGFyYW1ldGVycykNCglpZiAo
bGVuKHBsKTwyKToNCgkJcmVwID0gdSdJbnZhbGlkIHN5bnRheCEnDQoJZWxzZToNCgkJaWYgcGxb
MF0gaW4gQ09NTUFORF9IQU5ETEVSUzoNCgkJCXJlcGx5KHR5cGUsIHNvdXJjZSwgdSdJbnZhbGlk
IG5hbWUgb2YgdGhlIGdsb2JhbCBhbGlhcyEnKQ0KCQkJcmV0dXJuDQoNCgkJaWYgcGxbMV0uc3Bs
aXQoKVswXSBpbiBDT01NQU5EX0hBTkRMRVJTIG9yIHBsWzFdLnNwbGl0KClbMF0gaW4gQUxJQVMu
Z2FsaWFzbGlzdDoNCgkJCWNvbW1hbmQ9cGxbMV0uc3BsaXQoJyAnKQ0KCQkJQUxJQVMuYWRkKHBs
WzBdLCBwbFsxXSkNCgkJCQ0KCQkJaWYgZ2FjY2VzczoNCgkJCQlBTElBUy5naXZlX2FjY2Vzcyhw
bFswXSxnYWNjZXNzKQ0KCQkJZWxzZToNCgkJCQlpZiBjb21tYW5kWzBdIGluIENPTU1BTkRfSEFO
RExFUlM6DQoJCQkJCWdhY2Nlc3M9Q09NTUFORFNbY29tbWFuZFswXV1bJ2FjY2VzcyddDQoJCQkJ
CUFMSUFTLmdpdmVfYWNjZXNzKHBsWzBdLGdhY2Nlc3MpDQoJCQkJZWxpZiBjb21tYW5kWzBdIGlu
IEFMSUFTLmdhY2Nlc3NsaXN0Og0KCQkJCQlnYWNjZXNzPUFMSUFTLmdhY2Nlc3NsaXN0W2NvbW1h
bmRbMF1dDQoJCQkJCUFMSUFTLmdpdmVfYWNjZXNzKHBsWzBdLGdhY2Nlc3MpDQoJCQkNCgkJCXJl
cCA9IHUnR2xvYmFsIGFsaWFzIGFkZGVkIScNCgkJZWxzZToNCgkJCXJlcCA9IHUnVGhlIGJvZHkg
b2YgYW4gYWxpYXMgZG9lcyBub3QgY29udGFpbiBhIGNvbW1hbmQgb3IgYW5vdGhlciBhbGlhcyEn
DQoJcmVwbHkodHlwZSwgc291cmNlLCByZXApDQoNCmRlZiBoYW5kbGVyX2FsaWFzZGVsKHR5cGUs
IHNvdXJjZSwgcGFyYW1ldGVycyk6DQoJZ3JvdXBjaGF0ID0gc291cmNlWzFdDQoJDQoJaWYgbm90
IEdST1VQQ0hBVFMuaGFzX2tleShncm91cGNoYXQpOg0KCQlyZXBseSh0eXBlLCBzb3VyY2UsIHUn
VGhpcyBjb21tYW5kIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uZmVyZW5jZSEnKQ0KCQlyZXR1cm4N
Cg0KCWlmIHBhcmFtZXRlcnM6DQoJCWFsaWFzID0gcGFyYW1ldGVycy5zdHJpcCgpDQoJCWlmIEFM
SUFTLmFsaWFzbGlzdFtncm91cGNoYXRdLmhhc19rZXkoYWxpYXMpOg0KCQkJcmVzID0gQUxJQVMu
cmVtb3ZlKGFsaWFzLCBncm91cGNoYXQpDQoJCQlBTElBUy5yZW1vdmVfYWNjZXNzKGFsaWFzLCBn
cm91cGNoYXQpDQoJCQlpZiByZXMgPT0gRmFsc2U6DQoJCQkJcmVwID0gdSdMb2NhbCBhbGlhcyBy
ZW1vdmVkIScNCgkJCWVsc2U6DQoJCQkJcmVwID0gdSdEZWxldGVkIScNCgkJZWxzZToNCgkJCXJl
cCA9IHUnIEFsaWFzIGlzIG5vdCBmb3VuZCEnDQoJZWxzZToNCgkJcmVwID0gdSdJbnZhbGlkIHN5
bnRheCEnDQoJcmVwbHkodHlwZSwgc291cmNlLCByZXApDQoJDQpkZWYgaGFuZGxlcl9nYWxpYXNk
ZWwodHlwZSwgc291cmNlLCBwYXJhbWV0ZXJzKToNCglpZiBwYXJhbWV0ZXJzOg0KCQlhbGlhcyA9
IHBhcmFtZXRlcnMuc3RyaXAoKQ0KCQlpZiBBTElBUy5nYWxpYXNsaXN0Lmhhc19rZXkoYWxpYXMp
Og0KCQkJcmVzID0gQUxJQVMucmVtb3ZlKHBhcmFtZXRlcnMpDQoJCQlBTElBUy5yZW1vdmVfYWNj
ZXNzKHBhcmFtZXRlcnMpDQoJCQlpZiByZXMgPT0gRmFsc2U6DQoJCQkJcmVwID0gdSdHbG9iYWwg
YWxpYXMgcmVtb3ZlZCEnDQoJCQllbHNlOg0KCQkJCXJlcCA9IHUnRGVsZXRlZCEnDQoJCWVsc2U6
DQoJCQlyZXAgPSB1JyBBbGlhcyBpcyBub3QgZm91bmQhJw0KCWVsc2U6DQoJCXJlcCA9IHUnSW52
YWxpZCBzeW50YXghJw0KCXJlcGx5KHR5cGUsIHNvdXJjZSwgcmVwKQ0KDQpkZWYgaGFuZGxlcl9h
bGlhc2V4cGFuZCh0eXBlLCBzb3VyY2UsIHBhcmFtZXRlcnMpOg0KCWlmIHBhcmFtZXRlcnM6DQoJ
CWFsaWFzID0gcGFyYW1ldGVycy5zdHJpcCgpDQoJCWFsZXhwID0gQUxJQVMuY29tZXhwKHBhcmFt
ZXRlcnMsIHNvdXJjZSkNCgkJcmVwID0gJyVzID0gJXMnICUgKGFsaWFzLGFsZXhwKQ0KCWVsc2U6
DQoJCXJlcCA9IHUnSW52YWxpZCBzeW50YXghJw0KCXJlcGx5KHR5cGUsIHNvdXJjZSwgcmVwKQ0K
CQ0KZGVmIGhhbmRsZXJfZ2FsaWFzZXhwYW5kKHR5cGUsIHNvdXJjZSwgcGFyYW1ldGVycyk6DQoJ
aWYgcGFyYW1ldGVyczoNCgkJZ2FsaWFzID0gcGFyYW1ldGVycy5zdHJpcCgpDQoJCWdhbGV4cCA9
IEFMSUFTLmNvbWV4cChnYWxpYXMsIHNvdXJjZSwgJzEnKQ0KCQlyZXAgPSAnJXMgPSAlcycgJSAo
Z2FsaWFzLGdhbGV4cCkNCgllbHNlOg0KCQlyZXAgPSB1J0ludmFsaWQgc3ludGF4IScNCglyZXBs
eSh0eXBlLCBzb3VyY2UsIHJlcCkNCg0KZGVmIGhhbmRsZXJfYWxpYXNzaG93KHR5cGUsIHNvdXJj
ZSwgcGFyYW1ldGVycyk6DQoJZ3JvdXBjaGF0ID0gc291cmNlWzFdDQoJDQoJaWYgbm90IEdST1VQ
Q0hBVFMuaGFzX2tleShncm91cGNoYXQpOg0KCQlyZXBseSh0eXBlLCBzb3VyY2UsIHUnVGhpcyBj
b21tYW5kIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uZmVyZW5jZSEnKQ0KCQlyZXR1cm4NCgkNCgly
ZXA9JycNCglpZiBwYXJhbWV0ZXJzOg0KCQlpZiBBTElBUy5hbGlhc2xpc3RbZ3JvdXBjaGF0XS5o
YXNfa2V5KHBhcmFtZXRlcnMpOg0KCQkJcmVwID0gcGFyYW1ldGVycysnID0gJytBTElBUy5hbGlh
c2xpc3RbZ3JvdXBjaGF0XVtwYXJhbWV0ZXJzXQ0KCQllbHNlOg0KCQkJcmVwID0gdScgQWxpYXMg
aXMgbm90IGZvdW5kIScNCgllbHNlOg0KCQlsYWxzID0gQUxJQVMuYWxpYXNsaXN0W2dyb3VwY2hh
dF0ua2V5cygpDQoJCQ0KCQlpZiBsYWxzOg0KCQkJcmVwID0gdSdMaXN0IG9mIGxvY2FsIGFsaWFz
ZXMgKHRvdGFsOiAlZCk6XG5cbicgJSAobGVuKGxhbHMpKQ0KCQkJZm9yIGxhIGluIGxhbHM6DQoJ
CQkJcmVwICs9ICclZCkgJXMgPSAlc1xuJyAlIChsYWxzLmluZGV4KGxhKSsxLGxhLEFMSUFTLmFs
aWFzbGlzdFtncm91cGNoYXRdW2xhXSkNCgkJZWxzZToNCgkJCXJlcCA9IHUnTGlzdCBvZiBsb2Nh
bCBhbGlhc2VzIGVtcHR5IScNCgkJCQ0KCXJlcGx5KHR5cGUsIHNvdXJjZSwgcmVwKQ0KCQ0KZGVm
IGhhbmRsZXJfZ2FsaWFzc2hvdyh0eXBlLCBzb3VyY2UsIHBhcmFtZXRlcnMpOg0KCXJlcD0nJw0K
CWlmIHBhcmFtZXRlcnM6DQoJCWlmIEFMSUFTLmdhbGlhc2xpc3QuaGFzX2tleShwYXJhbWV0ZXJz
KToNCgkJCXJlcCA9IHBhcmFtZXRlcnMrJyA9ICcrQUxJQVMuZ2FsaWFzbGlzdFtwYXJhbWV0ZXJz
XQ0KCQllbHNlOg0KCQkJcmVwID0gdScgQWxpYXMgaXMgbm90IGZvdW5kIScNCgllbHNlOg0KCQln
YWxzID0gQUxJQVMuZ2FsaWFzbGlzdC5rZXlzKCkNCgkJDQoJCWlmIGdhbHM6DQoJCQlyZXAgPSB1
J0xpc3Qgb2YgZ2xvYmFsIGFsaWFzZXMgKHRvdGFsOiAlZCk6XG5cbicgJSAobGVuKGdhbHMpKQ0K
CQkJZm9yIGdhIGluIGdhbHM6DQoJCQkJcmVwICs9ICclZCkgJXMgPSAlc1xuJyAlIChnYWxzLmlu
ZGV4KGdhKSsxLGdhLEFMSUFTLmdhbGlhc2xpc3RbZ2FdKQ0KCQllbHNlOg0KCQkJcmVwID0gdSdM
aXN0IG9mIGdsb2JhbCBhbGlhc2VzIGVtcHR5IScNCg0KCXJlcGx5KHR5cGUsIHNvdXJjZSwgcmVw
KQ0KCQ0KZGVmIGhhbmRsZXJfYWxpYXNsaXN0KHR5cGUsIHNvdXJjZSwgcGFyYW1ldGVycyk6DQoJ
Z3JvdXBjaGF0ID0gc291cmNlWzFdDQoJaXNfZ2NoID0gVHJ1ZQ0KCQ0KCWlmIG5vdCBHUk9VUENI
QVRTLmhhc19rZXkoZ3JvdXBjaGF0KToNCgkJaXNfZ2NoID0gRmFsc2UNCgkNCglyZXAsZHNibGws
ZHNibGcsZ2xpc3QsbGxpc3Q9dSdMaXN0IG9mIGFsaWFzZXM6ICcsW10sW10sW10sW10NCgl0Z2xp
c3QgPSBBTElBUy5nYWxpYXNsaXN0LmtleXMoKQ0KCQ0KCWlmIGlzX2djaDoNCgkJaWYgQUxJQVMu
YWxpYXNsaXN0W2dyb3VwY2hhdF06DQoJCQlmb3IgYWxpYXMgaW4gQUxJQVMuYWxpYXNsaXN0W2dy
b3VwY2hhdF0ua2V5cygpOg0KCQkJCWlmIGFsaWFzIGluIENPTU1PRkZbZ3JvdXBjaGF0XToNCgkJ
CQkJZHNibGwuYXBwZW5kKGFsaWFzKQ0KCQkJCWVsc2U6DQoJCQkJCWxsaXN0LmFwcGVuZChhbGlh
cykNCgkJCWRzYmxsLnNvcnQoKQ0KCQkJbGxpc3Quc29ydCgpDQoJCQlpZiBsbGlzdDoNCgkJCQly
ZXAgKz0gdSdcbkxvY2FsICh0b3RhbDogJWQpOlxuJXMuJyAlIChsZW4obGxpc3QpLCcsICcuam9p
bihsbGlzdCkpDQoJCQlpZiBkc2JsbDoNCgkJCQlyZXArPXUnXG5cblxUaGUgZm9sbG93aW5nIGxv
Y2FsIGFsaWFzZXMgYXJlIGRpc2FibGVkIGluIHRoaXMgY29uZmVyZW5jZSAodG90YWw6ICVkKTpc
biVzLlxuJyAlKGxlbihkc2JsbCksJywgJy5qb2luKGRzYmxsKSkNCgkJZWxzZToNCgkJCXJlcCs9
JycNCgkNCgkJZm9yIGFsaWFzIGluIHRnbGlzdDoNCgkJCWlmIGFsaWFzIGluIENPTU1PRkZbZ3Jv
dXBjaGF0XToNCgkJCQlkc2JsZy5hcHBlbmQoYWxpYXMpDQoJCQllbHNlOg0KCQkJCWdsaXN0LmFw
cGVuZChhbGlhcykNCgkJZHNibGcuc29ydCgpDQoJCWdsaXN0LnNvcnQoKQ0KCWVsc2U6DQoJCWRz
YmxnID0gW10NCgkJdGdsaXN0LnNvcnQoKQ0KCQlnbGlzdCA9IHRnbGlzdA0KCQ0KCWlmIGdsaXN0
Og0KCQlyZXArPXUnXG5HbG9iYWwgKHRvdGFsOiAlZCk6XG4lcy4nICUgKGxlbihnbGlzdCksJywg
Jy5qb2luKGdsaXN0KSkNCgllbHNlOg0KCQlyZXArPScnDQoJDQoJaWYgZHNibGc6DQoJCXJlcCs9
dSdcblxuXFRoZSBmb2xsb3dpbmcgZ2xvYmFsIGFsaWFzZXMgYXJlIGRpc2FibGVkIGluIHRoaXMg
Y29uZmVyZW5jZSAodG90YWw6ICVkKTpcbiVzLicgJSAobGVuKGRzYmxnKSwnLCAnLmpvaW4oZHNi
bGcpKQ0KDQoJaWYgdHlwZT09J3B1YmxpYyc6DQoJCXJlcGx5KHR5cGUsIHNvdXJjZSwgdSdMb29r
IGluIHByaXZhdGUhJykNCglpZiBnbGlzdCBvciBsbGlzdDoNCgkJaWYgdHlwZSA9PSAnY29uc29s
ZSc6DQoJCQlyZXBseSh0eXBlLCBzb3VyY2UsIHJlcCkNCgkJZWxzZToNCgkJCXJlcGx5KCdwcml2
YXRlJywgc291cmNlLCByZXApDQoJZWxpZiBub3QgZ2xpc3QgYW5kIG5vdCBsbGlzdDoNCgkJcmVw
PSdMaXN0IG9mIGFsaWFzZXMgaXMgZW1wdHkhJw0KCQlpZiB0eXBlID09ICdjb25zb2xlJzoNCgkJ
CXJlcGx5KHR5cGUsIHNvdXJjZSwgcmVwKQ0KCQllbHNlOg0KCQkJcmVwbHkoJ3ByaXZhdGUnLCBz
b3VyY2UsIHJlcCkNCgkNCmRlZiBoYW5kbGVyX2FsaWFzYWNjZXNzKHR5cGUsIHNvdXJjZSwgcGFy
YW1ldGVycyk6DQoJZ3JvdXBjaGF0ID0gc291cmNlWzFdDQoJDQoJaWYgbm90IEdST1VQQ0hBVFMu
aGFzX2tleShncm91cGNoYXQpOg0KCQlyZXBseSh0eXBlLCBzb3VyY2UsIHUnVGhpcyBjb21tYW5k
IGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uZmVyZW5jZSEnKQ0KCQlyZXR1cm4NCg0KCWlmIHBhcmFt
ZXRlcnM6DQoJCWFyZ3MsYWNjZXNzID0gcGFyYW1ldGVycy5zcGxpdCgnICcpLDEwDQoJCWlmIGxl
bihhcmdzKT09MjoNCgkJCWFsaWFzID0gYXJnc1swXS5zdHJpcCgpDQoJCQlhY2Nlc3MgPSBhcmdz
WzFdLnN0cmlwKCkNCg0KCQkJaWYgYWNjZXNzLmlzZGlnaXQoKToNCgkJCQlhY2Nlc3MgPSBpbnQo
YWNjZXNzKQ0KCQkJZWxzZToNCgkJCQlyZXBseSh0eXBlLHNvdXJjZSx1J0ludmFsaWQgc3ludGF4
IScpDQoJCQkJcmV0dXJuDQoJCQkNCgkJCUFMSUFTLmdpdmVfYWNjZXNzKGFsaWFzLGFjY2Vzcyxn
cm91cGNoYXQpDQoJCQlyZXAgPSB1J1RoZSBsZXZlbCBvZiBhY2Nlc3MgdG8gdXNlIHRoZSBsb2Nh
bCBhbGlhcyAiJXMiIHNldCB0byAlZC4nICUgKGFsaWFzLGFjY2VzcykNCgkJCXJlcGx5KHR5cGUs
c291cmNlLHJlcCkNCgkJZWxpZiBBTElBUy5hY2Nlc3NsaXN0W2dyb3VwY2hhdF0uaGFzX2tleShh
cmdzWzBdKToNCgkJCWFsaWFzPWFyZ3NbMF0NCgkJCWFjY2Vzcz1BTElBUy5hY2Nlc3NsaXN0W2dy
b3VwY2hhdF1bYWxpYXNdDQoJCQlyZXAgPSB1J1RoZSBsZXZlbCBvZiBhY2Nlc3MgdG8gdXNlIHRo
ZSBsb2NhbCBhbGlhcyAiJXMiOiAlZC4nICUgKGFsaWFzLGFjY2VzcykNCgkJCXJlcGx5KHR5cGUs
c291cmNlLHJlcCkNCgkJZWxpZiBub3QgQUxJQVMuYWNjZXNzbGlzdFtncm91cGNoYXRdLmhhc19r
ZXkoYXJnc1swXSk6DQoJCQlyZXBseSh0eXBlLHNvdXJjZSx1JyBBbGlhcyBpcyBub3QgZm91bmQh
JykNCgllbHNlOg0KCQlyZXBseSh0eXBlLHNvdXJjZSx1J0ludmFsaWQgc3ludGF4IScpDQoJCQkN
CmRlZiBoYW5kbGVyX2dhbGlhc2FjY2Vzcyh0eXBlLCBzb3VyY2UsIHBhcmFtZXRlcnMpOg0KCWlm
IHBhcmFtZXRlcnM6DQoJCWFyZ3MgPSBwYXJhbWV0ZXJzLnNwbGl0KCcgJykNCgkJaWYgbGVuKGFy
Z3MpPT0yOg0KCQkJYWxpYXMgPSBhcmdzWzBdLnN0cmlwKCkNCgkJCWFjY2VzcyA9IGFyZ3NbMV0u
c3RyaXAoKQ0KCQkJDQoJCQlpZiBhY2Nlc3MuaXNkaWdpdCgpOg0KCQkJCWFjY2VzcyA9IGludChh
Y2Nlc3MpDQoJCQllbHNlOg0KCQkJCXJlcGx5KHR5cGUsc291cmNlLHUnSW52YWxpZCBzeW50YXgh
JykNCgkJCQlyZXR1cm4NCgkJCQ0KCQkJQUxJQVMuZ2l2ZV9hY2Nlc3MoYWxpYXMsYWNjZXNzKQ0K
CQkJcmVwID0gdSdUaGUgbGV2ZWwgb2YgYWNjZXNzIHRvIHRoZSB1c2Ugb2YgZ2xvYmFsIGFsaWFz
ICIlcyIgc2V0IHRvICVkLicgJSAoYWxpYXMsYWNjZXNzKQ0KCQkJcmVwbHkodHlwZSxzb3VyY2Us
cmVwKQ0KCQllbGlmIEFMSUFTLmdhY2Nlc3NsaXN0Lmhhc19rZXkoYXJnc1swXSk6DQoJCQlhbGlh
cz1hcmdzWzBdDQoJCQlhY2Nlc3M9QUxJQVMuZ2FjY2Vzc2xpc3RbYWxpYXNdDQoJCQlyZXAgPSB1
J1RoZSBsZXZlbCBvZiBhY2Nlc3MgdG8gdGhlIHVzZSBvZiBnbG9iYWwgYWxpYXMgIiVzIjogJWQu
JyAlIChhbGlhcyxhY2Nlc3MpDQoJCQlyZXBseSh0eXBlLHNvdXJjZSxyZXApDQoJCWVsaWYgbm90
IEFMSUFTLmdhY2Nlc3NsaXN0Lmhhc19rZXkoYXJnc1swXSk6DQoJCQlyZXBseSh0eXBlLHNvdXJj
ZSx1JyBBbGlhcyBpcyBub3QgZm91bmQhJykNCgllbHNlOg0KCQlyZXBseSh0eXBlLHNvdXJjZSx1
J0ludmFsaWQgc3ludGF4IScpCQ0KDQpyZWdpc3Rlcl9jb21tYW5kX2hhbmRsZXIoaGFuZGxlcl9h
bGlhc2FkZCwgQ09NTV9QUkVGSVgrJ2FsaWFzX2FkZCcsIFsnYWRtaW4nLCdhbGlhcycsJ2FsbCcs
JyonXSwgMjAsICcgQWxsb3dzIHlvdSB0byBhZGQgYSBsb2NhbCBhbGlhcywgaS5lIGFsaWFzLCB3
aGljaCB3aWxsIG9ubHkgd29yayBpbiB0aGlzIHBhcnRpY3VsYXIgY29uZmVyZW5jZS4nLCBDT01N
X1BSRUZJWCsnYWxpYXNfYWRkIDxuYW1lPls6PGFjY2Vzcz5dID0gPGJvZHlfYWxpYXM+JywgW0NP
TU1fUFJFRklYKydhbGlhc19hZGQgdGhpbmsgPSAlc3NheSAvbWUgdGhvdWdodC4uLicgJSAoQ09N
TV9QUkVGSVgpLENPTU1fUFJFRklYKydhbGlhc19hZGQgdHN5czozMCA9ICVzc2ggZWNobyAiUGFz
c2VkISInICUgKENPTU1fUFJFRklYKV0pDQpyZWdpc3Rlcl9jb21tYW5kX2hhbmRsZXIoaGFuZGxl
cl9nYWxpYXNhZGQsIENPTU1fUFJFRklYKydnYWxpYXNfYWRkJywgWydzdXBlcmFkbWluJywnYWxp
YXMnLCdhbGwnLCcqJ10sIDEwMCwgJ0FsbG93cyB5b3UgdG8gYWRkIGEgZ2xvYmFsIGFsaWFzLCBp
LmUgYWxpYXMsIHdoaWNoIHdpbGwgd29yayBpbiBhbGwgY29uZmVyZW5jZXMgYW5kIGluIHRoZSBi
b3Qgcm9zdGVyLicsIENPTU1fUFJFRklYKydnYWxpYXNfYWRkIDxuYW1lPls6PGFjY2Vzcz5dID0g
PGJvZHlfYWxpYXM+JywgW0NPTU1fUFJFRklYKydnYWxpYXNfYWRkIHRoaW5rID0gJXNzYXkgL21l
IHRob3VnaHQuLi4nICUgKENPTU1fUFJFRklYKSxDT01NX1BSRUZJWCsnZ2FsaWFzX2FkZCB0c3lz
OjMwID0gJXNzaCBlY2hvICJQYXNzZWQhIicgJSAoQ09NTV9QUkVGSVgpXSkNCnJlZ2lzdGVyX2Nv
bW1hbmRfaGFuZGxlcihoYW5kbGVyX2FsaWFzZGVsLCBDT01NX1BSRUZJWCsnYWxpYXNfZGVsJywg
WydhZG1pbicsJ2FsaWFzJywnYWxsJywnKiddLCAyMCwgJyBBbGxvd3MgeW91IHRvIHJlbW92ZSB0
aGUgbG9jYWwgYWxpYXMuJywgQ09NTV9QUkVGSVgrJ2FsaWFzX2RlbCA8bmFtZT4nLCBbQ09NTV9Q
UkVGSVgrJ2FsaWFzX2RlbCB0c3lzJ10pDQpyZWdpc3Rlcl9jb21tYW5kX2hhbmRsZXIoaGFuZGxl
cl9nYWxpYXNkZWwsIENPTU1fUFJFRklYKydnYWxpYXNfZGVsJywgWydzdXBlcmFkbWluJywnYWxp
YXMnLCdhbGwnLCcqJ10sIDEwMCwgJ0FsbG93cyB5b3UgdG8gZGVsZXRlIHRoZSBnbG9iYWwgYWxp
YXMuJywgQ09NTV9QUkVGSVgrJ2dhbGlhc19kZWwgPG5hbWU+JywgW0NPTU1fUFJFRklYKydnYWxp
YXNfZGVsIHRzeXMnXSkNCnJlZ2lzdGVyX2NvbW1hbmRfaGFuZGxlcihoYW5kbGVyX2FsaWFzZXhw
YW5kLCBDT01NX1BSRUZJWCsnYWxpYXNfZXhwJywgWydhZG1pbicsJ2FsaWFzJywnaW5mbycsJ2Fs
bCcsJyonXSwgMjAsICdBbGxvd3MgeW91IHRvIGRlcGxveSBhIGxvY2FsIGFsaWFzLCBpLmUgbG9v
ayBhdCBpdCBpbiBpdHMgcmF3IGZvcm0uJywgQ09NTV9QUkVGSVgrJ2FsaWFzX2V4cCA8bmFtZT4g
WzxvcHRpb25zPl0nLCBbQ09NTV9QUkVGSVgrJ2FsaWFzX2V4cCB0c3lzJ10pDQpyZWdpc3Rlcl9j
b21tYW5kX2hhbmRsZXIoaGFuZGxlcl9nYWxpYXNleHBhbmQsIENPTU1fUFJFRklYKydnYWxpYXNf
ZXhwJywgWydzdXBlcmFkbWluJywnYWxpYXMnLCdpbmZvJywnYWxsJywnKiddLCAxMDAsICdBbGxv
d3MgeW91IHRvIGRlcGxveSBhIGdsb2JhbCBhbGlhcywgaS5lIGxvb2sgYXQgaXQgaW4gaXRzIHJh
dyBmb3JtLicsIENPTU1fUFJFRklYKydnYWxpYXNfZXhwIDxuYW1lPiBbPG9wdGlvbnM+XScsIFtD
T01NX1BSRUZJWCsnZ2FsaWFzX2V4cCB0c3lzJ10pDQpyZWdpc3Rlcl9jb21tYW5kX2hhbmRsZXIo
aGFuZGxlcl9hbGlhc3Nob3csIENPTU1fUFJFRklYKydhbGlhc19zaG93JywgWydhZG1pbicsJ2Fs
aWFzJywnaW5mbycsJ2FsbCcsJyonXSwgMjAsICdEaXNwbGF5cyB0aGUgY29udGVudHMgb2YgYSBs
b2NhbCBhbGlhcy4gV2l0aG91dCBhcmd1bWVudHMgc2hvd3MgdGhlIGNvbnRlbnRzIG9mIGFsbCBs
b2NhbCBhbGlhc2VzLicsIENPTU1fUFJFRklYKydhbGlhc19zaG93IFs8bmFtZT5dJywgW0NPTU1f
UFJFRklYKydhbGlhc19zaG93IHRzeXMnLENPTU1fUFJFRklYKydhbGlhc19zaG93J10pDQpyZWdp
c3Rlcl9jb21tYW5kX2hhbmRsZXIoaGFuZGxlcl9nYWxpYXNzaG93LCBDT01NX1BSRUZJWCsnZ2Fs
aWFzX3Nob3cnLCBbJ3N1cGVyYWRtaW4nLCdhbGlhcycsJ2luZm8nLCdhbGwnLCcqJ10sIDEwMCwg
J0Rpc3BsYXlzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2xvYmFsIGFsaWFzLiBXaXRob3V0IGFyZ3Vt
ZW50cyBzaG93cyB0aGUgY29udGVudHMgb2YgYWxsIGdsb2JhbCBhbGlhc2VzLicsIENPTU1fUFJF
RklYKydnYWxpYXNfc2hvdyBbPG5hbWU+XScsIFtDT01NX1BSRUZJWCsnZ2FsaWFzX3Nob3cgdHN5
cycsQ09NTV9QUkVGSVgrJ2dhbGlhc19zaG93J10pDQpyZWdpc3Rlcl9jb21tYW5kX2hhbmRsZXIo
aGFuZGxlcl9hbGlhc2xpc3QsIENPTU1fUFJFRklYKydhbGlhc19saXN0JywgWydoZWxwJywnYWxp
YXMnLCdpbmZvJywnYWxsJywnKiddLCAxMCwgJyBBbGxvd3MgeW91IHRvIGxpc3QgYWxsIGFsaWFz
ZXMuJywgQ09NTV9QUkVGSVgrJ2FsaWFzX2xpc3QnLCBbQ09NTV9QUkVGSVgrJ2FsaWFzX2xpc3Qn
XSkNCnJlZ2lzdGVyX2NvbW1hbmRfaGFuZGxlcihoYW5kbGVyX2FsaWFzYWNjZXNzLCBDT01NX1BS
RUZJWCsnYWxpYXNfYWNjJywgWydhZG1pbicsJ2FsaWFzJywnYWxsJywnKiddLCAyMCwgJ0FsbG93
cyB5b3UgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiBhY2Nlc3MgdG8gbG9jYWxseSBkZWZpbmVkIGFs
aWFzLiBXaXRob3V0IGFyZ3VtZW50cyBzaG93cyB0aGF0IHRoZSBsZXZlbCBvZiB0aGUgYWxpYXMu
JywgQ09NTV9QUkVGSVgrJ2FsaWFzX2FjYyA8YWxpYXM+IFs8YWNjZXNzPl0nLCBbQ09NTV9QUkVG
SVgrJ2FsaWFzX2FjYyB0c3lzIDEwJyxDT01NX1BSRUZJWCsnYWxpYXNfYWNjIHRzeXMnXSkNCnJl
Z2lzdGVyX2NvbW1hbmRfaGFuZGxlcihoYW5kbGVyX2dhbGlhc2FjY2VzcywgQ09NTV9QUkVGSVgr
J2dhbGlhc19hY2MnLCBbJ3N1cGVyYWRtaW4nLCdhbGlhcycsJ2FsbCcsJyonXSwgMTAwLCAnQWxs
b3dzIHlvdSB0byBjaGFuZ2UgdGhlIGxldmVsIG9mIGFjY2VzcyB0byBhIHNwZWNpZmljIGdsb2Jh
bCBhbGlhcy4gV2l0aG91dCBhcmd1bWVudHMgc2hvd3MgdGhhdCB0aGUgbGV2ZWwgb2YgdGhlIGFs
aWFzLicsIENPTU1fUFJFRklYKydnYWxpYXNfYWNjIDxhbGlhcz4gWzxhY2Nlc3M+XScsIFtDT01N
X1BSRUZJWCsnZ2FsaWFzX2FjYyB0c3lzIDMwJyxDT01NX1BSRUZJWCsnZ2FsaWFzX2FjYyB0c3lz
J10p